'user staict';

let opt = {};
//插入数据 传入一个模型 一个文档
opt.insert =  (obj, json) =>{

	var el = new obj(json);
	return new Promise((resolve, reject)=>{
		el.save((err, res) => {
	        if (err)  reject(err)
	        resolve(res)
	    	
	    });
	})
}

/**
 * 插入数据 传入一个模型 一个文档
 */
opt.create =  (obj, json) =>{

	var el = new obj(json);

	return new Promise((resolve, reject)=>{
		obj.create(json, 
			(err, res) => {
	        if (err)  reject(err);
	        resolve(res)
	    	
	    });
	})
}
// 更新数据 传入模型 搜索关键词 更新文档
opt.updata =  (obj, target, json) =>{
	let wherestr = target,
		result = null,
		updatestr = json;
		return new Promise((resolve, reject)=>{
			obj.update(wherestr, updatestr, (err,res)=>{
		        if (err)  reject(err)
		        resolve(res)
		    	
		    });
		})

}

/**
 * 使用id更新数据 传入模型 id 更新内容
 * @param  {[object]} obj    mongodb 模型
 * @param  {[type]} subId  数据ID
 * @param  {[type]} newstr 需要更新的数据
 * @return {[type]}        返回修改后的对像
 */
opt.findByIdAndUpdate = (obj, subId, newstr) => {
	let id = subId;
	let updatestr = newstr;

	return new Promise ( (resolve, reject) => {

	    obj.findByIdAndUpdate(id, updatestr, function(err, res){
	        if (err) {
	            reject(err)
	        }
	        console.log('findByIdAndUpdate', res)
	        resolve(res)

	    })
	} )

}

// 删除
opt.del = (obj, key)=> {
	return new Promise((resolve, reject)=>{
			obj.remove(key,(err,res) => {
		        if (err)  reject(err)
		        resolve(res)
		    	
		    });
		})
}
// 查询数据库 传入模型 关键字
opt.find = function (obj, key) {
	let wherestr = key;
	return new Promise(function (resolve, reject) {
		obj.findOne(wherestr, function(err, res) {
			if (err)  reject(err)
		      resolve(res)
		})
	})
}

// 数量查询 传入模型
opt.getCount = (obj)=> {
	let wherestr = {};
	return new Promise((resolve, reject)=>{
			obj.count(wherestr, (err, res) => {
		        if (err)  reject(err)
		        resolve(res)
		    	
		    });
		})
}

// 根据id查询 传入模型 id
opt.findById =  (obj, targetId)=> {
	let id = targetId;
	return new Promise((resolve, reject)=>{
			obj.findById(id, (err, res) => {
		        if (err)  reject(err)
		        resolve(res)
		    	
		    });
		})
}
// 查询所有
opt.findAll =  function(obj, json = {}) {
	return new Promise((resolve, reject)=>{
			obj.find(json, (err, res) => {
		        if (err)  reject(err)
		        resolve(res)
		    });
		})

}


// 	// 模糊查询  有点问题
// 	function getByRegex(){
// 		// {$regex:/l/i} 
// 		//  LIKE模糊查询userName包含l字母的数据(%l%)
// 		let wherestr = {'username': {$regex:/l/i}};

// 		User.find(wherestr,(err,res)=>{
// 			if(err){
// 				throw new Error(err)
// 			}

// 			console.log(`Res:${res}`)
// 		})
// 	}
// 	getByRegex()

// 	function getByPager(){
	    
// 	    let pageSize = 5;                   //一页多少条
// 	    let currentPage = 1;                //当前第几页
// 	    let sort = {'logindate':-1};        //排序（按登录时间倒序）
// 	    let condition = {};                 //条件
// 	    let skipnum = (currentPage - 1) * pageSize;   //跳过数
	    
// 	    User.find(condition).skip(skipnum).limit(pageSize).sort(sort).exec((err, res)=> {
// 	        if (err) {
// 	            throw new Error(err)
// 	        }
// 	          console.log("Res:" + res);
// 	    })
// 	}
module.exports = opt;